package com.jichaoyun.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jichaoyun.common.model.Result;
import com.jichaoyun.model.entity.StationInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jichaoyun.model.vo.ComParametersVo;
import com.jichaoyun.model.vo.DayDataVo;
import com.jichaoyun.model.vo.StationParametersVo;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

public interface IStationInfoService extends IService<StationInfo> {


    List<Map<String,Object>> getAppStationNameList(Integer id);


    /**
     * 煤化工园区高压流量5个时间点
     * @return
     */
    List<Map<String,Object>> getFiveFlowHigh();

    /**
     * 煤化工园区低压流量5个时间点
     * @return
     */
    List<Map<String,Object>> getFiveFlowLow();



    /**
     * 煤化工园区低压流量10个时间点
     * @return
     */
    List<Map<String,Object>> getTenFlow();

    /**
     * 智慧看板三个厂的流量数据
     * @return
     */
    List<Map<String,Object>> getThreeFlowUpAndDown();

    /**
     * 智慧看板总累计流量、实时流量
     * @return
     */
    List<Map<String,Object>> getOverFlow();

    /**
     * 根据站点名称获取电话号码
     * @param stationName
     * @return
     */
    String getTelByStationName(String stationName);

    /**
     * 查询用户所有站点名称
     * @param id
     * @return
     */
    List<Map<String,Object>> getStationNameList(Integer id);

    /**
     * 查询用户线路分布情况
     * @return
     */
    Map<String,Integer> getUserLineDistribution();

    /**
     * 查询用户类别分布
     * @return
     */
    Map<String,Integer> getUserCategory();

    /**
     * 获取所有站点信息
     * @return
     */
    IPage<StationInfo> getAllStationInfo(Integer pageNo);
    /**
     * 查找所有未删除的站点按照站号排序
     * @return
     */
    List<StationInfo> getAllUsedStationInfo();
    /**
     *查找所有站点信息
     * @param pageNo
     * @param pageSize
     * @return
     */
    IPage<StationInfo> getAllStationInfo(Integer pageNo,Integer pageSize);

    /**
     * 巡检站点查询
     * @param pageNo
     * @param pageSize
     * @return
     */
    IPage<StationInfo> getStationInfoByXunjian(Integer pageNo,Integer pageSize);

    List<StationInfo> getAllStationInfo();

    /**
     * 修改站点启用状态
     * @param stationNo
     * @return
     */
    Result<Object> updateStationStatus(Integer stationNo);

    /**
     * 修改站点参数信息
     * @param stationParametersVo
     */
    void updateStationInfo(StationParametersVo stationParametersVo);

    /**
     * 修改站点通讯参数信息
     * @param comParametersVo
     */
    void updateComParameters(ComParametersVo comParametersVo);

    /**
     * 根据站号查看所属线路名称
     * @param station_no
     * @return
     */
    String getLineNameByStationNo(Integer station_no);

    /**
     * 增加站点信息
     * @param stationInfo
     */
    void addStationInfo(StationInfo stationInfo);

    /**
     * 获取所有站点编号
     * @return List<Integer>
     */
    List<Integer> getStationNoList();

    /**
     * 设置报表结算的小时和日期
     * @param id
     * @param account_date
     * @param account_hour
     */
    void updateAccountDateAndHour(Integer id,Integer account_date, Integer account_hour);

    Integer getAccountHourByStation(Integer station_no);

    Integer getAccountDateByStation(Integer station_no);

    /**
     * 根据站点编号查询站点名称
     * @param station_no
     * @return station_name
     */
    String getStationNameByStationNo(Integer station_no);

    /**
     *模糊查询站名
     * @param likeName
     * @return
     */
    List<String> getStationNoNameListByLikeName(String likeName);

    /**
     * 根据日期返回当日流速排名
     * @param date
     * @return
     */
    Map<String,Float> getFlowRankListByDate(LocalDate date);

    /**
     * 根据日期返回当日平均温度排名
     * @param date
     * @return
     */
    Map<String,Float> getTempRankListByDate(LocalDate date);

    /**
     * 根据日期返回当日平均压力排名
     * @param date
     * @return
     */
    Map<String,Float> getPresRankListByDate(LocalDate date);
    List<StationInfo> getAllUsedStation();

    /**
     * 查询所有非叶子节点
     * @return
     */
    List<StationInfo> getAllLineStation();

    /**
     * 所有站点信息表，导出到Excel
     * @param response
     * @throws IOException
     */
    void getAllStationExcel(HttpServletResponse response) throws IOException;

    /**
     * 预测未来三天的数据
     * @param stationNo
     * @param todayStart
     * @param threeDaysAgoStart
     * @return
     */
    Map<Integer, DayDataVo> getFutureData(Integer stationNo, LocalDateTime todayStart, LocalDateTime threeDaysAgoStart);

    void getFutureData2Excel(Integer stationNo, LocalDateTime todayStart, LocalDateTime threeDaysAgoStart,HttpServletResponse response);
}
